package com.cskaoyan.javase.oop2._1extends._0introduction._1new;
/**
 * 继承的引入
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 人类：有姓名属性，以及吃饭这个行为
 * 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *
 * 约定：
 *      正常情况下，类中的成员变量应该尽量私有化，不给外界直接的访问权限
 *      但是为了课堂上课方便，我们暂时不使用封装。(必要时会用)
 *
 *
 * 很明显,在这个案例中,Person类中的成员在Teacher和Student类中都存在,如果可能的话,我们希望能够复用这些代码,复用这些成员,能做到吗?
 * 这时就需要使用Java中的继承语法
 *
 * 继承:
 *      Java中,在定义一个类时,可以显式的,直接的,使用"extends"关键字,表示继承某个类,继承某个类后,会得到该类的所有成员,完成复用成员的需求.
 *      语法:
 *      [访问权限修饰符] class 类名 extends 被继承类的类名{
 *          // 类体
 *      }
 *
 *   解释:
 *      1.被继承的类称之为"父类",继承父类的类就叫做子类.
 *      2.子类继承父类后,会得到父类的所有成员.但是继承一般不考虑静态成员,仅考虑普通成员的继承(静态成员的继承与否后面再说)
 *      3.子类不光可以继承父类,得到父类成员.还可以自定义自身的成员
 *          这叫做子类在父类的基础上扩展了父类
 *          所以子类的功能往往都比父类更加强大
 *          "青出于蓝而胜于蓝"
 *
 *       4.父类中没有的成员,子类不能继承,子类得不到.
 *
 * @since 17:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        Student s = new Student();
        System.out.println(t.name);
        s.eat();
    }
}

class Person{
    String name;
    public void eat(){
        System.out.println("我喜欢吃饭!");
    }
}

class Teacher extends Person{
    // 写变量名时,必要的缩写是可以的,但是胡乱的缩写是不行的
    int teacherId;
    public void teach(){
        System.out.println("我喜欢上课!");
    }
}

class Student extends Person{
    int stuId;
    public void study(){
        System.out.println("我喜欢听长风老师讲课!");
    }
}